package com.vecspace.database.model;

import java.lang.reflect.Method;
import java.util.Map;

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;

import com.fasterxml.jackson.annotation.JsonIgnore;
import org.apache.commons.lang3.StringUtils;

import com.vecspace.exception.HException;

/**POJO的父类
 * 
 * @version 1.0
 * @author wanghua
 * @reviewer  
 * @createTime 2021年9月30日 下午5:45:54
 */
public abstract class BasePO {
	public abstract void parseFrom(Map<String, Object> row);
		
//	private String dbTableName;
//	private String idColumnName;
//
//	/**数据库表名（根据@Table注解获取）
//	 *
//	 * @return
//	 * @author wanghua
//	 * @reviewer
//	 * @createTime 2021年10月3日 下午8:02:38
//	 */
//	@Transient
//	@JsonIgnore(true)
//	public String getDbTableName() {
//		if(this.dbTableName == null) {//不需要加锁，多执行一次损耗很小
//			String dbTableName2 = "";
//			Class<?> clazz = this.getClass();
//			Table tableAnno = clazz.getAnnotation(Table.class);
//			if(tableAnno == null)throw new HException("ERR-10404:"+clazz.getName()+"不是一个含有Table注解的类");
//			String schema = tableAnno.schema();
//			String realDbSchema = null;
//			if(StringUtils.isNotBlank(schema)) {
//				 realDbSchema = DbSchemas.getRealDbSchema(schema);
//			}
//			if(StringUtils.isBlank(realDbSchema)) {
//				dbTableName2 = tableAnno.name();
//			}else {
//				dbTableName2= realDbSchema+"."+tableAnno.name();
//			}
//			this.dbTableName = dbTableName2;
//		}
//		return this.dbTableName;
//	}
//
//	/**表的ID字段名（根据@Id，@Column注解获取）
//	 *
//	 * @return
//	 * @author wanghua
//	 * @reviewer
//	 * @createTime 2021年10月3日 下午8:44:29
//	 */
//	@Transient
//	@JsonIgnore(true)
//	public String getIdColumnName() {
//		if(this.idColumnName == null) {
//			String idColumnName2 = "";
//			Method[] methods = this.getClass().getMethods();
//			for(Method method : methods) {
//				Id idAnno = method.getAnnotation(Id.class);
//				if(idAnno != null) {
//					Column columnAnno = method.getAnnotation(Column.class);
//					if(columnAnno != null) {
//						idColumnName2 = columnAnno.name();
//						break;
//					}
//				}
//			}
//			this.idColumnName = idColumnName2;
//		}
//		return this.idColumnName;
//	}
}
